/* Copyright (c) 2004-2024 Peigen.info. All rights reserved. */

package info.peigen.hotpot.component.open.api.core.web.form;


import jakarta.validation.constraints.NotEmpty;
import lombok.*;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import lombok.experimental.SuperBuilder;

/**
 * <b>(ApiForm)</b>
 *
 * @author Peigen
 * @version 1.0.0
 * @since 2021/10/12
 */
@SuperBuilder
@Data
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Accessors(chain = true)
public class ApiForm {
    /**
     * 订单号，必须全局唯一，总长度22
     * 生成格式：
     * 日期时分秒（14）+分区键（2）+随机数（4）+生成顺序（2）
     * <p>
     * 例如：
     * yyyyMMddHHmmss+88+1234+01
     */
    String gid;
    /** 请求流水号, 30 位 yyyyMMddHHmmss(14位)+key(8位每个partner不一样)+(8位) ,唯一 */
    @NotEmpty
    String requestNo;
    /** 接口名称 */
    @NotEmpty
    String apiCode;
    /** 合作方id,平台提供 */
    @NotEmpty
    String partnerId;
    /** 响应结果类型 */
    String resultType;
    /** 加密串 */
    @NotEmpty
    String encrypt;
    /** 客户浏览器 IP */
    @Builder.Default
    String userIp  = "";
    /** 接口版本，固定为：1.0 */
    @Builder.Default
    String version = "1.0";

    String token;
    /**
     * 签名
     * 签名的参数包含：requestNo、apiCode、partnerId、userIp、version 以及 原始数据的json串.
     * 签名时，将以上参数包装为Map，按ASCII升序排序。对Map进行MD5签名
     */
    @NotEmpty
    String sign;
}